/* Frame table and its size in pages. */
struct page_info *frame_table;
-unsigned long frame_table_size;
unsigned long max_page;
unsigned long total_pages;
void __init init_frametable(void)
{
unsigned long p;
+ unsigned long nr_pages;
+ int i;
- frame_table_size = PFN_UP(max_page * sizeof(struct page_info));
+ nr_pages = PFN_UP(max_page * sizeof(struct page_info));
+ nr_pages = min(nr_pages, (4UL << (20 - PAGE_SHIFT)));
+
- p = alloc_boot_pages(min(frame_table_size, 4UL << 20), 1);
+ p = alloc_boot_pages(nr_pages, 1);
if (p == 0)
panic("Not enough memory for frame table\n");
frame_table = (struct page_info *)(p << PAGE_SHIFT);
- frame_table_size = (frame_table_size + PAGE_SIZE - 1) & PAGE_MASK;
-
- memset(frame_table, 0, frame_table_size);
+ for (i = 0; i < nr_pages; i += 1)
+ clear_page((void *)((p + i) << PAGE_SHIFT));
}
long arch_memory_op(int op, XEN_GUEST_HANDLE(void) arg)
#define share_xen_page_with_guest(p, d, r) do { } while (0)
#define share_xen_page_with_privileged_guests(p, r) do { } while (0)
-extern unsigned long frame_table_size;
-
/* hope that accesses to this will fail spectacularly */
#define machine_to_phys_mapping ((u32 *)-1UL)